package com.hnzbxy.api.biz.service;


import com.hnzbxy.api.biz.entity.Department;
import com.hnzbxy.api.biz.vo.DepartmentEditVO;
import com.hnzbxy.api.biz.vo.DepartmentVO;
import com.hnzbxy.api.biz.vo.DeptNodeVO;
import com.hnzbxy.api.system.vo.PageVO;

import java.util.List;

/**
 * 部门服务接口
 *
 * @author xiaoge
 * @date 2020/3/7 16:30
 * @version 1.0
 */
public interface DepartmentService {

    /**
     * 分页查询部门列表
     *
     * @param pageNum      页码
     * @param pageSize     每页条数
     * @param departmentVO 查询条件
     * @return 分页部门列表
     */
    PageVO<DepartmentVO> findDeptList(Integer pageNum, Integer pageSize, DepartmentVO departmentVO);

    /**
     * 根据ID获取部门详情
     *
     * @param id 部门ID
     * @return 部门详情
     */
    DepartmentVO info(Long id);

    /**
     * 获取部门树形结构
     *
     * @return 部门树形列表
     */
    List<DeptNodeVO> findDeptTree();

    /**
     * 为部门分配上级部门
     *
     * @param id           部门ID
     * @param parentDeptId 上级部门ID
     */
    void assignParent(Long id, Long parentDeptId);

    /**
     * 根据ID删除部门
     *
     * @param id 部门ID
     */
    void deleteById(Long id);

    /**
     * 更新部门状态
     *
     * @param id     部门ID
     * @param status 部门状态：0-未启用，1-正常，2-暂停，3-撤销
     */
    void updateStatus(Long id, Integer status);

    /**
     * 更新部门信息
     *
     * @param id                 部门ID
     * @param departmentEditVO 部门编辑信息
     */
    void update(Long id, DepartmentEditVO departmentEditVO);

    /**
     * 获取部门编辑信息
     *
     * @param id 部门ID
     * @return 部门编辑信息
     */
    DepartmentEditVO edit(Long id);

    /**
     * 添加部门
     *
     * @param departmentVO 部门信息
     */
    void add(DepartmentVO departmentVO);

    /**
     * 查询所有部门（可排除指定部门）
     *
     * @param excludeId 排除的部门ID
     * @return 部门列表
     */
    List<Department> findAll(Long excludeId);

    /**
     * 查询所有部门
     *
     * @return 部门列表
     */
    List<Department> findAll();
}
    